﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Yappi.HierarchicalField
{
    /// <summary>
    /// Соотнесение идентификаторов иерархического идентификатора  и  идентификатора в шарепоинте
    /// </summary>
    public class HierarchicalIDToIDMapping : IComparable<HierarchicalIDToIDMapping>
    {
        /// <summary>
        /// Конструктор маппинг контейнера
        /// </summary>
        /// <param name="value">Иерархический идентификатор</param>
        /// <param name="id">Идентификатор шарепоинт</param>
        public HierarchicalIDToIDMapping(string value, int id)
        {
            this.HierarchicalID = new HierarchicalID(value);
            this.ID = id;
        }

        /// <summary>
        /// Иерархический идентификатор
        /// </summary>
        public HierarchicalID HierarchicalID { get; set; }

        /// <summary>
        /// Идентификатор элемента шарепоинт
        /// </summary>
        public int ID { get; set; }

        #region Переопределенные операторы

        /// <summary>
        /// Оператор равенства классов
        /// </summary>
        /// <param name="r1">Первый параметр</param>
        /// <param name="r2">Второй параметр</param>
        /// <returns>Истина если равны</returns>
        public static bool operator ==(HierarchicalIDToIDMapping r1, HierarchicalIDToIDMapping r2)
        {
            return r1.Equals(r2);
        }

        /// <summary>
        /// Оператор неравенства операторов
        /// </summary>
        /// <param name="r1">Первый параметр</param>
        /// <param name="r2">Второй параметр</param>
        /// <returns>Истина если не равны</returns>
        public static bool operator !=(HierarchicalIDToIDMapping r1, HierarchicalIDToIDMapping r2)
        {
            return !(r1 == r2);
        }

        /// <summary>
        /// Оператор меньше
        /// </summary>
        /// <param name="r1">Первый параметр</param>
        /// <param name="r2">Второй параметр</param>
        /// <returns>Истина если меньше</returns>
        public static bool operator <(HierarchicalIDToIDMapping r1, HierarchicalIDToIDMapping r2)
        {
            return r1.CompareTo(r2) < 0;
        }

        /// <summary>
        /// Оператор больше
        /// </summary>
        /// <param name="r1">Первый параметр</param>
        /// <param name="r2">Второй параметр</param>
        /// <returns>Истина если больше</returns>
        public static bool operator >(HierarchicalIDToIDMapping r1, HierarchicalIDToIDMapping r2)
        {
            return r1.CompareTo(r2) > 0;
        }
        #endregion

        /// <summary>
        /// Эквивалентность обьектов
        /// </summary>
        /// <param name="obj">Элемент для сравнения</param>
        /// <returns>истина если эквивалентны</returns>
        public override bool Equals(object obj)
        {
            return base.Equals(obj);
        }

        /// <summary>
        /// Хэш код элемента
        /// </summary>
        /// <returns>Хэш код этого элемента</returns>
        public override int GetHashCode()
        {
            return base.GetHashCode();
        }

        #region IComparable<HierarchicalIDToIDMapping> Members
        /// <summary>
        /// Сравнение 2 элементов
        /// </summary>
        /// <param name="other">Элемент для сравнения</param>
        /// <returns>Результат сравнения</returns>
        public int CompareTo(HierarchicalIDToIDMapping other)
        {
            return this.HierarchicalID.CompareTo(other.HierarchicalID);
        }

        #endregion
    }
}
